home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / JForth / Extras / Clone / aOldCalcCall < prev    next >
Encoding:
Text File  |  1992-05-12  |  1.2 KB  |  50 lines

  1. : CALCCALL  ( calledOpAdr callingOpAdr -- opcode data #bytes , if #bytes<8)
  2.             (                     ELSE    opcode w@aN-2 .. w@a0 N*2 )
  3.   \
  4.   CloneOverlay @  \ only 'on' if CloneOverlay set
  5.   IF
  6.      ( -- calledOpAdr callingOpAdr )
  7.      \ Can't save ABS hunk tables in overlays, need
  8.      \ new 'call' mechanism...
  9.      \
  10.      \ move.l  #CalledAdr,a0
  11.      \ jsr     0(a5,a0.l)     a5 set by CallOverlay (in startjforth.asm)
  12.      \
  13.      $ 8800 $ 4eb5
  14.      3 pick     4 pick   16 -shift
  15.      $ 207c
  16.      10
  17.   ELSE
  18.      \ is it within relative-distance range?
  19.      \
  20.      2dup 2+ -  [ decimal ]  dup -32769 >  over 32768 < and
  21.      ( -- cldop clngop rel-displacement flag )
  22.      IF
  23.         -rot 2drop   $ 6100  swap  4
  24.      ELSE
  25.         drop
  26.         over  [ 32 k ] literal <
  27.         IF
  28.            \
  29.            \ Origin relative...
  30.            \
  31.            drop $ 4eac swap 4
  32.         ELSE
  33.            \
  34.            \ if 32k - 96k, use +64k relative...
  35.            \
  36.            over  [ 96 k ] literal <
  37.            IF
  38.               drop  [ 64 k ] literal -  $ 4eab swap   4
  39.            ELSE
  40.               \
  41.               \ Push CallingOpAdr+2 on TargetABS stack for relocation.
  42.               2+ TargetABS +stack  $ 4eb9 swap 6
  43.            THEN
  44.         THEN
  45.      THEN
  46.   THEN 
  47. ;
  48.  
  49.  
  50.